《计算机网络》摘抄笔记整理

本书采用了独创的自顶向下方法,即从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深入浅出,注重教学方法,理论与实践相结合~


传输层

传输层负责程序之间数据传输的效率以及可靠性,这些程序称为端点。

传输层完成传输连接的建立、维持和拆除

传输层有两种类型的协议:

1)面向连接的协议TCP
2)无连接协议UDP

传输层功能:

1)传输层连接管理
2)向会话层提供独立于通信子网的、可靠的、透明的数据传输服务 (封装性)
3)多路复用 (提高效率)
4)寻址(将报文传送给指定进程)
5)差错控制 (重发纠错)
6)流量控制 (端点流量)

复用:多个用户使用一个IO资源发送消息
分用:多个用户使用一个IO资源接收消息

传输层位于网络层之上

场景虚构

📽 东西海岸各12个表兄弟书信通信
主机(也称为终端系统)=房子
进程=堂兄妹
应用程序消息=信封里的信
网络层协议=邮递服务(包括邮递员)
传输层协议=Ann和Bill(整理代发人)

━━●●━━━━━━━━━━━

UDP

UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以他在传输数据时非常快。

没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。UDP也是无法避免攻击的,比如:UDP flood攻击。

不可靠,不稳定,因为UDP没有TCP的那些可靠机制,在网络质量不好时很容易丢包。

– QQ语音
– QQ视频
– TFTP

UDP协议分为首部字段和数据字段,其中首部字段只占用8个字节,分别是个占用两个字节的源端口、目的端口、长度和检验和。

━━●●━━━━━━━━━━━

TCP

TCP的可靠性体现在传输数据之前,三次握手建立连接(四次挥手释放连接),并且在数据传递时,有确认、窗口、重传、拥塞控制机制,数据传完之后,断开连接用来节省系统资源。

– 浏览器,用的HTTP
– FlashFXP,用的FTP
– Outlook,用的POP、SMTP
– Putty,用的Telnet、SSH
– QQ文件传输

TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。

四次挥手

1)第一次挥手:客户端发送一个FIN,用来关闭客户端到Server的数据传送,客户端进入FIN_WAIT_1状态。
FIN:释放一个连接

2)第二次挥手:Server收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

4)第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

场景虚构

📽 TCP可靠传输是如何实现的

🍞 分割块:应用数据被分割成TCP认为最适合发送的数据块。

⏰ 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

👯‍ 编码排序:TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

🗃 校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。

🗑 自动丢弃:TCP的接收端会丢弃重复的数据。

⏳ 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。

🎢 拥塞控制:当网络拥塞时,减少数据的发送。

━━●●━━━━━━━━━━━

停止等待协议

TCP协议是面向流的,而UDP是面向数据包的。

A发送一个数据包后就只等待,B接受一个数据后对数据包进行处理后发送一个“确认包”,这时候A才可以再发下一个数据包,如果在A等到超过了A所能接收的时间,那么A就重新发一个包。

优点:就是简单有效。

缺点:信道利用率低,发送端很多时间都花在等待上,接收端需要忙于对每个发送做确认。

━━●●━━━━━━━━━━━

滑动窗口协议

滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。

体现了TCP面向字节流的设计思路。

一是提供TCP的可靠性,二是提供TCP的流控特性。

━━●●━━━━━━━━━━━

TCP的流量控制

一般来说,我们总是希望传输数据的更快一些,但假设发送方把数据发送的非常快。而接收方来不及接收,这就可能造成数据的丢失。流量控制就是让发送方的发送速率不要太快。让接收方来得及接收。

对于成块数据流,TCP利用滑动窗体机制来实现流量的控制,对于交互数据流,TCP利用捎带ACK和Nagle算法来实现流量的控制。

TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。

发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。

━━●●━━━━━━━━━━━

TCP拥塞控制

慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )。

一、慢开始、拥塞避免:
1)在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。
2)在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值。
3)用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。

二、快重传、快恢复:
如果发送方设置的超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,TCP马上把拥塞窗口 cwnd 减小到1,并执行慢开始算法,同时把慢开始门限值ssthresh减半。这是不使用快重传的情况。
快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。

━━●●━━━━━━━━━━━

HTTP工作流程

1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

HTTP 1.1 中的 8 种请求方式

GET:请求指定的页面信息,并返回实体主体。
HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT:从客户端向服务器传送的数据取代指定的文档的内容。
DELETE:请求服务器删除指定的页面。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS:允许客户端查看服务器的性能。
TRACE:回显服务器收到的请求,主要用于测试或诊断。

Request 包括以下格式(四部分):
1)请求行(request line):GET、POST、..
2)请求头部(header):指出请求的目的地
3)空行:空行是规范
4)请求数据:主体

Response 包括以下格式(四部分):
1)状态行:(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
2)消息报头:说明客户端要使用的一些附加信息
3)空行:空行是规范
4)响应正文:响应正文,服务器返回给客户端的文本信息

HTTP常用状态码及其含义

1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

场景虚构

📽 在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容。

━━●●━━━━━━━━━━━

HTTPS

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

HTTPS和HTTP的区别是什么

1、HTTPS是加密传输协议,HTTP是名文传输协议;
2、HTTPS需要用到SSL证书,而HTTP不用;
3、HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO

【参考:(1)为保护用户隐私安全,谷歌优先索引HTTPS网页、(2)百度开放收录https站点,https全网化势不可挡】;
4、 HTTPS标准端口443,HTTP标准端口80;
5、 HTTPS基于传输层,HTTP基于应用层;
6、 HTTPS在浏览器显示绿色安全锁,HTTP没有显示。

场景虚构

📽 HTTPS协议的工作流程
step1:
👨🏻‍💻 -> 你好 -> 🗄

step2:
🗄 -> 你好,我是服务器,这里是我的数字证书 -> 👨🏻‍💻

step3:
👨🏻‍💻 -> 向我证明你就是服务器,这是一个随机字符串 -> 🗄
🗄 ->{一个随机字符串}[私钥|RSA] -> 👨🏻‍💻(🔑公钥解密做对比)

step4:
👨🏻‍💻 -> [私钥|RSA] -> 🗄
🗄 ->{OK,已经收到你发来的对称加密算法和密钥!有什么可以帮到你的?}[密钥|对称加密算法] -> 👨🏻‍💻
👨🏻‍💻 ->{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法] -> 🗄
🗄 ->{你好,你的余额是100元}[密钥|对称加密算法] -> 👨🏻‍💻
… … (其他通讯)

━━●●━━━━━━━━━━━

RSA公钥密码体制

RSA密码体制是一种公钥密码体制,公钥公开,私钥保密,它的加密解密算法是公开的。 由公钥加密的内容可以并且只能由私钥进行解密,并且由私钥加密的内容可以并且只能由公钥进行解密。也就是说,RSA的这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容可以由并且只能由对方进行解密。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 Evolution All Rights Reserved.

UV : | PV :